package com.briercliffe.settlers.core.domain;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * @author mbriercl
 */
public class StandardCoinBag implements CoinBag
{
    // ==================================================
    // class static data
    // ==================================================
    // ==================================================
    // class static methods
    // ==================================================

    // ==================================================
    // instance data
    // ==================================================
    private List<TileCoin> mTileCoins =
            new ArrayList<TileCoin>(Arrays.asList(
                    new TileCoin(2),
                    new TileCoin(2),
                    new TileCoin(3),
                    new TileCoin(3),
                    new TileCoin(4),
                    new TileCoin(4),
                    new TileCoin(5),
                    new TileCoin(5),
                    new TileCoin(6),
                    new TileCoin(6),
                    new TileCoin(8),
                    new TileCoin(8),
                    new TileCoin(9),
                    new TileCoin(9),
                    new TileCoin(10),
                    new TileCoin(10),
                    new TileCoin(11),
                    new TileCoin(11),
                    new TileCoin(12),
                    new TileCoin(12)
            ));

    // ==================================================
    // factories
    // ==================================================

    // ==================================================
    // constructors
    // ==================================================
    public StandardCoinBag()
    {
        Collections.shuffle(mTileCoins);
    }
    // ==================================================
    // public methods
    // ==================================================

    @Override
    public TileCoin getNextCoin()
    {
        if (!mTileCoins.isEmpty())
        {
            return mTileCoins.remove(0);
        }
        return null;
    }

    @Override
    public boolean hasNext()
    {
        return !mTileCoins.isEmpty();
    }

    // ==================================================
    // non public methods
    // ==================================================

    // ==================================================
    // getters / setters
    // ==================================================
}
